package com.detech.sbmh.business.user.service;

import com.detech.sbmh.base.hibernate.user.entity.TbUser;
import com.detech.sbmh.base.page.Page;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

public interface UserService {

    /**
     * @description 用户注册
     * @author 方安伦
     * @date 2022/11/22 9:37
     * @param username,realname,age
     **/
    void register(String username, String realname, int age);

    /**
    * @description 检查用户帐号是否已经存在
    * @author 方安伦
    * @date 2021/11/24 9:55
    * @param username
    * @return boolean
     **/
    boolean isUsernameExist(String username) ;

    /**
    * @description 根据用户ID查询用户信息
    * @author 方安伦
    * @date 2021/11/24 10:00
    * @param id
    * @return TbUser
     **/
    TbUser findUserById(String id) ;

    /**
    * @description 更新用户信息
    * @author 方安伦
    * @date 2021/11/24 10:02
    * @param tbUser
     **/
    void updateUser(TbUser tbUser) ;

    /**
    * @description 删除用户
    * @author 方安伦
    * @date 2021/11/24 10:12
    * @param tbUser
     **/
    void deleteUser(TbUser tbUser) ;

    /**
    * @description 上传用户头像
    * @author 方安伦
    * @date 2021/11/26 15:49
    * @param id,file
     **/
    void uploadHeadPicture(String id,MultipartFile file) throws IOException;

    /**
    * @description 查询用户列表（实体数据返回）
    * @author 方安伦
    * @date 2021/11/30 11:42
    * @param page,username,realname
    * @return Page
     **/
    Page loadUserList(Page page, String username, String realname) ;

    /**
    * @description 查询用户订单数量（Map数据返回）（多表查询分页）
    * @author 方安伦
    * @date 2021/11/30 11:51
    * @param page
    * @return Page
     **/
    Page loadUserOrderListMap(Page page) ;

    /**
    * @description 查询用户订单数量（实体数据返回）（多表查询分页）
    * @author 方安伦
    * @date 2021/11/30 14:52
    * @param page,username,realname
    * @return Page
     **/
    Page loadUserOrderList(Page page,String username,String realname) ;

    /**
    * @description 查询用户列表（Map数据返回）
    * @author 方安伦
    * @date 2021/12/7 11:27
    * @param page,username,realname
    * @return Page
     **/
    Page loadUserListMap(Page page, String username, String realname) ;

    /**
    * @description 查询用户列表（实体数据返回）不分页
    * @author 方安伦
    * @date 2021/12/7 11:36
    * @param username,realname
    * @return List<TbUser>
     **/
    List<TbUser> loadUserListNoPage(String username, String realname) ;

    /**
    * @description 查询用户列表（返回部分字段的Map数据）不分页
    * @author 方安伦
    * @date 2021/12/7 11:40
    * @param username,realname
    * @return List
     **/
    List loadUserListMapNoPage(String username, String realname) ;

    /**
    * @description 查询用户列表（原生SQL）不分页，不带参数
    * @author 方安伦
    * @date 2021/12/7 12:01
    * @return List
     **/
    List loadUserListSqlNoPageNoParam() ;

    /**
    * @description 查询用户列表（原生SQL）不分页，带参数
    * @author 方安伦
    * @date 2021/12/7 14:19
    * @param username
    * @return List
     **/
    List loadUserListSqlNoPageParam(String username) ;

    /**
    * @description 删除用户信息
    * @author 方安伦
    * @date 2022/11/24 10:07
    * @param userId 用户ID
    **/
    void deleteUserById(Integer userId);
}
